<template>
  <view class="search-box">
  <uni-search-bar  @input="input" placeholder="请输入你搜索的内容" radius="20" cancelButton="none"></uni-search-bar>
  <!-- 搜索建议列表 -->
  <view class="sugg-list" v-if="serarchResults.length!=0">
    <view class="sugg-item" v-for="(item,index) in serarchResults" :key="index" @click="gotoDetail(item)">
      <view class="goods-name">{{item.goods_name}}</view>
      <uni-icons type="arrow-right" size="30"></uni-icons>
    </view>
  </view>
  <!-- 搜索历史区域 -->
  <view class="history-box" v-else>
    <view class="history-title">
      <text>搜索历史</text>
      <uni-icons type="trash" size="17" @click="clean"></uni-icons>
    </view>
    <!-- 列表区域 -->
    <view class="history-list">
      <view @click="gotoGoodList(item)"  class="text-item" v-for="(item,index) in historyList">{{item}}</view>
    </view>
  </view>
  </view>
</template>

<script>
  export default {
    data() {
      return {
        // 计时器id，专门用来指定对应的计时器
        timer:null,
        kw:'',
        //搜索结果列表
        serarchResults:[],
        //搜索关键词的记录
        historyList:[]
      };
    },
    methods:{
      // input处理事件
      input(e){
        //解决输入防抖问题
        clearTimeout(this.timer)  //这部代码我觉得比较好的一步就是，他在没有任何一个计时器的情况下，仍然去删除对应的计时器id,是不会报错的，从这一点上看，他有比较好的兼容性
        // 获取相应输入数据
        this.timer=setTimeout(()=>{
          this.kw=e
          this.getSearchList()
        },500)
        // 这是用来清除上一次延时所产生的延时器
      },
      async getSearchList(){
        /*
        这个方法是用来发起网络请求，
        */
        if(this.kw==''){
          this.serarchResults=[]
          return 
        }
        const {data:res}=await  uni.$http.get('/api/public/v1/goods/qsearch',{query:this.kw})
        if(res.meta.status!=200)return 
        this.serarchResults=res.message
        // console.log(this.serarchResults);
        //记录搜索的关键字
        this.saveHistoryList()
      },
      gotoDetail(item){
        // console.log(item);
        uni.navigateTo({
          url:"/subpkg/goods_detail/goods_detail?goods_id="+item.goods_id
        })
      },
      saveHistoryList(){
        /*
        处理历史信息遗留问题
        1、最新消息，提前展示
        2、历史信息重复问题
        */
       //这个变量是用来判断是否会出现重复问题
       var flag=0;
       //这个变量是用来获取有重复的情况下的具体索引
       var specialIndex=0;
       for(let i=0;i<this.historyList.length;i++){
         if(this.historyList[i]==this.kw){
           flag=1;
           specialIndex=i;
           break;
         }
       }
       if(flag==1){
         /*
         解决有重复的排序问题
         */
         var newHistoryList=[]
         // 重复的那个具体位置上的值首先需要获取到
         newHistoryList.push(this.historyList[specialIndex])
         for(let i=0;i<this.historyList.length;i++){
           if(i==specialIndex){
             continue
           }
           newHistoryList.push(this.historyList[i])
         }
         // 覆盖原数组
         this.historyList=newHistoryList
         
       }else{
         /*
         解决没有重复的排序问题
         */
         // this.historyList.push(this.kw)
         var newHistoryList=[]
         newHistoryList.push(this.kw)
         for(let i=0;i<=this.historyList.length-1;i++){
            newHistoryList.push(this.historyList[i])
         }
         this.historyList=newHistoryList
       }
      },
      clean(){
        /*
        清空所有的历史数据
        */
        this.historyList=[]
      },
      gotoGoodList(item){
        uni.navigateTo({
          url:'/subpkg/goods_list/goods_list?query='+this.kw
        })
      }
    }
  }
</script>

<style lang="scss">
.search-box{
  // 吸顶效果，一件套
  position: sticky;
  top:0;
  z-index: 999;
}
.sugg-list{
  padding: 0 5px;
.sugg-item{
  display: flex;
  align-items: center;
  justify-content: space-between;
  padding: 13px 0;
  border-bottom: 1px solid #efefef;
  .goods-name{
    // 文本不换行属性
    white-space: nowrap;
    //文本超出后会自动隐藏
    overflow: hidden;
    // 超出部分使用...进行表示
    text-overflow: ellipsis;
  }
  }
}
 .history-title{
   display: flex;
   justify-content: space-between;
   margin: 0 5px;
   line-height: 40px;
  text{
     font-weight: bold;
   }
 }
 .history-list{
   display: flex;
  view{
    // width: 20px;
    height: 20px;
    background-color: rgba(221,196,196,0.2);
    text-align: center;
    line-height: 20px;
    border-radius: 5px;
    // flex-grow: 1;
    // box-sizing: border-box;
    margin: 0 10px;
  }
 }
</style>
